package com.dayu.finecomm.protocol.codec;

import io.netty.buffer.ByteBuf;

/**
 * @ClassName: ProtocolDecoder
 * @Description:报文解析
 * @author: 戴卫国
 * @date: 2018年2月23日 下午4:23:17
 * 
 * @param <T>
 * @Copyright: 2018 dayu Inc. All rights reserved.
 */
public abstract class ProtocolDecoder<T> {

	/**
	 * @Title: unpack
	 * @Description: 协议解包
	 * @param: @param
	 *             packet
	 * @param: @return
	 */
	public abstract T unpack(ByteBuf packet);

	/**
	 * @Title: check
	 * @Description: 报文检测 返回值必须改成-1， -2 以支持无头无尾的情况。
	 * @param: @param
	 *             in
	 * @param: @return
	 *             是否正常报文
	 * @param: @throws
	 *             InvalidStream
	 */
	public abstract int check(ByteBuf in) throws InvalidStream;

	public abstract int checkStart(ByteBuf in) throws InvalidStream;

	/**
	 * @Title: timing
	 * @Description: 校时指令
	 * @param: @return
	 */
	public Object timing() {
		return null;
	}

	/**
	 * @Title: needEcho
	 * @Description: 是否默认回包
	 * @param: @return
	 */
	public boolean needEcho() {
		return true;
	}

	/**
	 * @Title: echo
	 * @Description: 回包具体报文
	 * @param: @return
	 */
	public abstract byte[] echo();
}